home *** CD-ROM | disk | FTP | other *** search
/ JCSM Shareware Collection 1993 November / JCSM Shareware Collection - 1993-11.iso / cl720 / sst115j.lzh / SSTHLP.C < prev    next >
C/C++ Source or Header  |  1992-07-17  |  6KB  |  185 lines

  1. /* ------------------------------------------------------------------------ */
  2. /*                                ssthelp.c                                 */
  3. /*                   high-level help interface routines                     */
  4. /*                                                                          */
  5. /*      CopyRight (C) 1991,1992  Steven Lutrov.   All rights reserved.      */
  6. /* ------------------------------------------------------------------------ */
  7. #include <stdio.h>
  8. #include <conio.h>
  9. #include <stdlib.h>
  10. #include <string.h>
  11.  
  12. #include "sstvid.h"
  13. #include "sstwin.h"
  14. #include "sstkey.h"
  15.  
  16. #define MAXLINE     80          /* maximum help line width  */
  17. #define MAXHELPS    25          /* maximum help topics */
  18.  
  19. typedef struct {
  20.       char *title;
  21.       int  tjust;
  22.       int bdr;
  23.       int colour[4];
  24. } _hwin;
  25.  
  26. static struct helps {
  27.     char hname [9];     /* help name */
  28.     int h, w;           /* height and width */
  29.     long hptr;          /* pointer to help text */
  30. } hps [MAXHELPS+1];
  31.  
  32.  
  33. static int hp = 0;          /* help counter */
  34. static int ch = 0;          /* */
  35. static int hx, hy;          /* x and y coordinates for help screen */
  36. FILE   *helpfp = NULL;      /* help file */
  37. char   helpname[64];        /* help tag name */
  38.  
  39. static _hwin hw = {            /* set default to monochrome attributes */
  40.    NULL, JUST_C, BRD_SINGLE,
  41.        { CLR(BLACK,     LIGHTGRAY, DIM),
  42.      CLR(BLACK,     LIGHTGRAY, DIM),
  43.      CLR(LIGHTGRAY, BLACK,     BRIGHT),
  44.      CLR(BLACK,     LIGHTGRAY, DIM)
  45.        }
  46. };
  47.  
  48. #define HWIN_BORDER       (hw.colour[WIN_BORDER])
  49. #define HWIN_TITLEC       (hw.colour[WIN_TITLE])
  50. #define HWIN_ACCENT        (hw.colour[WIN_ACCENT])
  51. #define HWIN_FACE          (hw.colour[WIN_FACE])
  52. #define HCOLOUR            (hw.colour)
  53.  
  54. /* ------------------------------------------------------------------------ */
  55. /*                        local function declerartions                      */
  56. /* ------------------------------------------------------------------------ */
  57.  
  58. void   getline      (char *lineh);
  59. void   help         (void);
  60.  
  61. /* ------------------------------------------------------------------------ */
  62. /*                      load the HELP! definition file                      */
  63. /* ------------------------------------------------------------------------ */
  64. void Hload(char *hn)
  65. {
  66.     extern void (*helpfunc)();
  67.     extern int helpkey;
  68.     char lineh [MAXLINE];
  69.  
  70.     if (strcmp(helpname, hn) == 0)
  71.         return;
  72.     helpfunc = help;
  73.     helpkey = F1;
  74.     hp = 0;
  75.     strcpy(helpname, hn);
  76.     if ((helpfp = fopen(helpname, "r")) == NULL)
  77.         return;
  78.     getline(lineh);
  79.     while (1)    {
  80.         if (hp == MAXHELPS)
  81.             break;
  82.         if (strncmp(lineh, "<end>", 5) == 0)
  83.             break;
  84.         if (*lineh != '<')
  85.             continue;
  86.         hps[hp].h = 3;
  87.         hps[hp].w = 18;
  88.         strncpy(hps[hp].hname, lineh+1,8);
  89.         hps[hp].hptr = ftell(helpfp);
  90.         getline(lineh);
  91.         while (*lineh != '<')    {
  92.             hps[hp].h++;
  93.             hps[hp].w = max(hps[hp].w, strlen(lineh)+2);
  94.             getline(lineh);
  95.         }
  96.         hp++;
  97.     }
  98. }
  99.  
  100. /* ------------------------------------------------------------------------ */
  101. /*                  get a line of text from the help file                   */
  102. /* ------------------------------------------------------------------------ */
  103. static void getline(char *lineh)
  104. {
  105.     if (fgets(lineh, MAXLINE, helpfp) == NULL)
  106.     strcpy(lineh, "<end>");
  107. }
  108.  
  109. /* ------------------------------------------------------------------------ */
  110. /*                   set the current active help screen                     */
  111. /* ------------------------------------------------------------------------ */
  112. void Hset(char *s, int x, int y)
  113. {
  114.     for (ch = 0; ch < hp; ch++)
  115.         if (strncmp(s, hps[ch].hname,8) == 0)
  116.             break;
  117.     hx = x;
  118.     hy = y;
  119. }
  120. /* ------------------------------------------------------------------------ */
  121. /*                    display the current help window                       */
  122. /* ------------------------------------------------------------------------ */
  123. void help(void)
  124. {
  125.     char ln [MAXLINE];
  126.     int i;
  127.     WINDOW *wnd;
  128.     extern int helpkey;
  129.  
  130.     if (hp && ch != hp)    {
  131.      vpushcur();
  132.      vhidecur();
  133.      if ((wnd = Westablish(hx, hy, hps[ch].h, hps[ch].w)) == NULL)
  134.         return;
  135.      Wsettitle(wnd, hw.title,hw.tjust);
  136.      WBORDER = HWIN_BORDER;
  137.      WTITLEC = HWIN_TITLEC;
  138.      WACCENT = HWIN_ACCENT;
  139.      WFACE = HWIN_FACE;
  140.      Wsetborder(wnd, hw.bdr);
  141.      Wshow(wnd);
  142.      fseek(helpfp, hps[ch].hptr, 0);
  143.      for (i = 0; i < hps[ch].h-3; i++)    {
  144.         getline(ln);
  145.         Wprintf(wnd, ln);
  146.         }
  147.      kgetch();
  148.      Wdelete(wnd);
  149.      vpopcur();
  150.     }
  151. }
  152.  
  153. /* ------------------------------------------------------------------------ */
  154. /*                   set the border typecurrent active help screen                     */
  155. /* ------------------------------------------------------------------------ */
  156. void Hsetborder(int b)
  157.  
  158. {
  159.   hw.bdr = b;
  160. }
  161.  
  162.  
  163. /* ------------------------------------------------------------------------ */
  164. /*                  set the help windows colour characteristics             */
  165. /* ------------------------------------------------------------------------ */
  166. void Hsetcolour(int area, int bg, int fg, int inten)
  167.  
  168. {
  169.   if (area == WIN_ALL)
  170.     while (area)
  171.        HCOLOUR [--area] = CLR(bg, fg, inten);
  172.     else
  173.        HCOLOUR [area] = CLR(bg, fg, inten);
  174. }
  175.  
  176. /* ------------------------------------------------------------------------ */
  177. /*                         set the help windows title                       */
  178. /* ------------------------------------------------------------------------ */
  179. void Hsettitle(char *t, int j)
  180.  
  181. {
  182.   hw.title = t;
  183.   hw.tjust =j;
  184. }
  185.